﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EntitiesLayer
{
 
   public sealed class DetallePrueba
    {
       private static readonly int CANTIDAD_PORCENTAJES=3;

       private int idEjercicio;

       public int IdEjercicio
       {
           get { return idEjercicio; }
           
       }

       private int series;

       public int Series
       {
           get { return series; }
           
       }

       private int repeticiones;

       public int Repeticiones
       {
           get { return repeticiones; }
           
       }

       private decimal peso;

       public decimal Peso
       {
           get { return peso; }
           
       }

       private decimal _1rm;

       public decimal _1RM{

           get { return _1rm; }
       }
       private IList<decimal> porcentajes;

       public IReadOnlyList<decimal> Porcentajes
       {
           get { return new ReadOnlyCollection<decimal>(porcentajes); }
           
       }

       private IList<decimal> resultados;

       public IReadOnlyList<decimal> Resultados
       {
           get { return new ReadOnlyCollection<decimal>(porcentajes); }

       }


       //constructor para cualquier detalle
       public DetallePrueba(int idEjercicio, 
           int series, int repeticiones, decimal peso, IList<decimal> porcentajes, IList<decimal> resultados, decimal _1rm) {

              
               this.series = series;
               this.repeticiones = repeticiones;
               this.peso = peso;
               this.porcentajes = porcentajes;
               this.resultados = resultados;
               this._1rm = _1rm;

               Validacion(this.series, this.repeticiones, this.peso, this._1rm, this.porcentajes, this.resultados);
       
       }
       //constructor para plantilla
       public DetallePrueba(int idEjercicio,
           int series, int repeticiones, decimal peso, IList<decimal> porcentajes)
           :this(idEjercicio, series, repeticiones, peso, porcentajes, new List<decimal>(), 0)
       {

       }

       //podria dejar mensajes mas detallados.
       private void Validacion(int series, int repeticiones, decimal peso, decimal imc,
           IList<decimal> porcentajes, IList<decimal> resultados){

           bool NoValido = series < 0
               || repeticiones < 0
               || peso < 0
               || porcentajes == null
               || porcentajes.Count != CANTIDAD_PORCENTAJES
               || resultados == null
               || resultados.Count > 3
               || imc<0;

           for (int i = 0; i < porcentajes.Count && !NoValido; i++)
               NoValido = NoValido || porcentajes[i] < 0;
           
           for (int i = 0; i < resultados.Count && !NoValido; i++)
               NoValido = NoValido || resultados[i] < 0;

           if (NoValido)
               throw new ArgumentException("La informacion del detalle no es valida");
           
           
           
               
       }



       
    }
}
